"""
@Time : 2022/3/30
@Author : 16088
@File : 后缀分类
@Description : 按自定义后缀进行分类
"""
import os
import shutil

"""
第一步，根据文件后缀移动到相对应格式目录下
"""

# 提升作用域，可以全局使用此变量
# 手动定义目录，像下面的注释掉
# real_path = 'D:\\test2\\'
# listdir = os.listdir(filepath)

filepath = str(input(r'请输入要分类的目录：'))
real_path = filepath + '\\'
listdir = os.listdir(real_path)
# 创建目录并移动文件方法
def create_filepath(filename, old_filepath, new_filepath):
    # 判断目标文件夹是否存在，不存在则创建
    if not os.path.exists(new_filepath):
        os.mkdir(new_filepath)
    # 判断有没有同名文件，没有则移动，有就pass
    if not os.path.exists(new_filepath + "\\" + filename):
        shutil.move(old_filepath, new_filepath)
        print(f"【{old_filepath}】已经被移动到【{new_filepath}】中")
    else:
        print(f"【{new_filepath}】目录中有同名文件【{filename}】,自判断是否删除")


# 1.思路一：自定义文件类型，按照自己定义的类型进行匹配；好处在于可以自己决定扫描和移动什么文件
def detect_file_type(file, file_type):
    if file.endswith(file_type):
        # 传入创建目录
        new_file_path = real_path + file_type
        old_file_path = real_path + file
        # 调用移动方法
        create_filepath(file, old_file_path, new_file_path)


def move_file1():
    count_sum = 0
    count_file = 0
    count_dir = 0
    for file in listdir:
        # 判断后缀名是什么类型的，此处是直接判断好，思路二：不判断直接根据后缀创建一个目录移动进去（更智能）
        filetype_list = ['exe', 'zip', 'txt']

        if os.path.isfile(real_path + file):
            # 有可能文件没有后缀，考虑此情况
            try:
                # 思路一：按照列表里定义好的进行分类
                for filetype in filetype_list:
                    detect_file_type(file, filetype)
            except:
                print(r"【{}】文件没有后缀类型，请自己判断".format(file))

            count_file += 1
        else:
            count_dir += 1
        count_sum += 1

    print(r'总计扫描到的文件数【{}】和目录数【{}】,总计扫描到【{}】'.format(count_file, count_dir, count_sum))


if __name__ == '__main__':
    move_file1()
